package org.lai.mapper;

import lombok.Getter;
import org.apache.ibatis.annotations.*;
import org.lai.pojo.Emp;
import org.lai.pojo.EmpQueryParam;

import java.util.List;
import java.util.Map;

/**
 * 员工信息
 */
@Mapper
public interface EmpMapper {
//    ------------- 原始分页查询 ---------------
    /**
     * 查询总记录数
     */
//    @Select("select count(*) from emp e left join dept on e.dept_id = dept.id")
//    long count();
    /**
//     * 分页查询
//     */
//    @Select("select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id order by e.update_time " +
//            "desc limit #{start},#{pageSize}")
//    List<Emp> list(Integer start,Integer pageSize);
//     使用pagehelper插件

    /**
     *
     * @return
     * 注意事项:
     *  1. sql语句结尾不能加分号
     *  2. PageHelper仅仅能对紧跟在其后的第一个查询语句起作用
     */
//    @Select("select e.*,d.name deptName from emp e left join dept d on e.dept_id = d.id " +
//            "order by e.update_time " +
//            "desc")
//    List  <Emp> list(String name, Integer gender, LocalDate begin, LocalDate end);

    /**
     * 条件查询员工信息
     * @param empQueryParam 查询参数(封装为一个对象)
     * @return
     */
    List<Emp> list(EmpQueryParam empQueryParam);

    /**
     * 新增员工基本信息
     * @param emp
     * 因为对象属性名与sql字段名一致,所以可以直接使用对象的属性名传递
     */
    @Options(useGeneratedKeys = true,keyProperty = "id") // Mybatis提供的注解,获取数据库中自动生成的主键,然后将他封装到emp对象的id属性中去
    @Insert("insert into emp(username, name, gender, phone, job, salary, image, entry_date, dept_id, create_time, update_time)" +
            "values (#{username},#{name},#{gender},#{phone},#{job},#{salary},#{image},#{entryDate},#{deptId},#{createTime},#{updateTime})")
    void insert(Emp emp);

    /**
     * 根据id批量删除员工基本信息
     * @param ids
     */
    void deleteByIds(List<Integer> ids);
    /**
    根据id查询员工基本信息,和工作经历信息
     */
    Emp getById(Integer id);

    /**
     * 根据id更新员工基本信息
     * @param emp
     */
    void updateById(Emp emp);

    /**
     * 统计员工职位人数
     */
    @MapKey("pos")
    List<Map<String , Object>> countEmpJobData();

    /**
     * 统计员工性别人数
     * @return
     */
    @MapKey("name")
    List<Map<String, Object>> countEmpGenderData();

    List<Emp> getlist();

    /**
     * 登录功能
     * @param username
     * @param password
     */
    @Select("select id,username,name from emp where username = #{username} and password = #{password}")
    Emp selectByUsernameAndPassword(Emp emp);
}
